--参数列表
--1.1.优惠券ID
local voucherId = ARGV[1]
--1.2.用户ID
local userId = ARGV[2]
--1.3.订单ID
local orderId = ARGV[3]
--2.数据key
--2.1.库存key
local stockKey = "seckill:stock:" .. voucherId
--2.2.订单key
local orderKey = "seckill:order:" .. voucherId

--3.脚本业务
--3.1.判断库存是否充足 get stockKey
if (tonumber(redis.call("get", stockKey)) <= 0) then
    --3.1.1.库存不足，返回1
    return 1
end
--3.2.判断用户是否下单 SISMEMBER orderKey, userId
if (redis.call("SISMEMBER", orderKey, userId)==1) then
    --3.3存在，说明是重复下单，返回2
    return 2
end

--3.4，减库存 incrby stockKey, -1
redis.call("incrby", stockKey, -1)

--3.5，添加订单，下单，保存用户 SADD orderKey, userId
redis.call("SADD", orderKey, userId)
--发送消息到队列中 XADD stream.orders * k1 v1 k2 v2...
redis.call("XADD", "stream.orders", "*",  "userId", userId, "voucherId", voucherId,"id", orderId)

return 0
